package cdu.hjx.project.sys.handler;


import cdu.hjx.project.pojo.Dict;
import cdu.hjx.project.pojo.DictDetail;
import cdu.hjx.project.sys.service.DictService;
import cdu.hjx.project.utils.CommonResult;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
@CrossOrigin
@RestController
@RequestMapping("/dict") // 字典模块
public class DcitHandler {

    @Resource
    private DictService dictService;

    @PostMapping("/add")
    public CommonResult addDict(@RequestBody Dict dict) {
        try {
            int i = dictService.insertDict(dict);
            if (i > 0) {
                return CommonResult.success(dict);
            }
            if (i == 0) {
                return CommonResult.error(500, "添加字典失败");
            }
            return CommonResult.error(-1, "您要添加的字典信息已经存在,请换一个.");
        } catch (Exception e) {
            e.printStackTrace();
            // dictService.insertDict(dict);出现异常怎么办？
            return CommonResult.error(503, "系统异常,添加失败,请联系管理员.");
        }
    }

    /**
     * 查询字典
     * @param pageNum 页码
     * @param pageSize 每页显示的条数
     * @return
     */
    @GetMapping("/dicts/{pageNum}/{pageSize}")
    public CommonResult<PageInfo<Dict>> dicts(@PathVariable("pageNum") int pageNum,@PathVariable("pageSize") int pageSize) {
        try {
            //PageHelper.startPage(pageNum,pageSize);//只需要这一行，不需要在xml中配置
            //return dictService.dicts().size()>0 ? CommonResult.success(dictService.dicts()):CommonResult.error(401,"请求成功，但是没有查询到数据");
            PageInfo<Dict> pageInfo = new PageInfo<>(dictService.dicts());
            return pageInfo.getList().size()>0 ? CommonResult.success(pageInfo) : CommonResult.error(401, "请求成功，但是没有对应的数据");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,查询失败,请联系管理员.");
        }
    }

    /**
     * 根据id查询字典
     * 访问路径：http://localhost:8080/dict/1
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public CommonResult<Dict> findDictById(@PathVariable("id") Integer id) {
        try {
            Dict dict = dictService.findDictById(id);
            return null != dict ? CommonResult.success(dict) : CommonResult.error(401, "请求成功，但是没有查询到数据");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,查询失败,请联系管理员.");
        }
    }

    @PutMapping("/update")
    public CommonResult updateDict(@RequestBody Dict dict) {
        try {
            int i = dictService.updateDict(dict);
            return i > 0 ? CommonResult.success(dict) : CommonResult.error(500, "修改字典失败或数据已被其他人修改");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,修改失败,请联系管理员.");
        }
    }

    @DeleteMapping("/delete/{id}")
    public CommonResult deleteDict(@PathVariable("id") Integer id) {
        try {
            int i = dictService.deleteDict(id);
            return i > 0 ? CommonResult.success(null) : CommonResult.error(500, "删除字典失败或数据已被其他人修改");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,删除失败,请联系管理员.");
        }
    }

    @GetMapping("/list/{dtype}/{pageNum}/{pageSize}")
    public CommonResult<PageInfo<DictDetail>> list(@PathVariable("dtype") String dtype,@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize) {
       try {
            PageInfo<DictDetail> pageInfo = new PageInfo<>(dictService.list(dtype));
            return pageInfo.getList().size()>0 ? CommonResult.success(pageInfo) : CommonResult.error(401, "请求成功，但是没有对应的数据");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,查询失败,请联系管理员.");
        }
    }

}
